javascript 中this 的用法

this 是 Javascript语言的一个关键字.

它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如,

function test(){
    this.x = 1;
}

随着函数使用场合的不同,this 的值会发生变化.但是有一个总的原则就是,this 指的说是调用函数的那个对象.

1.纯粹函数调用

//这是函数的最通常的用法,术语全局性调用,因此this 就代表全局对象Global.

function test(){
    this.x =1;
    alert(this.x);//1
}


var x = 1;
function test(){
    alert(this.x);//1
}

2.作为对象的方法调用

//函数可以作为某个对象的方法调用,这时候 this 指的就是这个上级对象.

function test(){
    alert(this.x);
}

var obj = {
    x: 1
};

obj.test =  test;

obj.test();//1

3.作为构造函数调用

//所谓构造函数,就是通过这个函数生成的一个新对象.这时,this就指的是这个新对象.

var x = 2;
function test(){
    this.x = 1;
}
var o = new test();

alert(o.x);//1

4.apply 调用

apply() 是函数对象的一个方法, 它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象,因此 this 指的就是 这个第一个参数.

var x = 1;
function test(){
    alert(this.x);
}

var obj = {
    x :2
};

obj.test = test;

obj.test.apply();//1
obj.test.apply(obj);//2
//apply 的第一个参数为空时候, 默认调用全局对象.

call( ), apply( ), bind( )

  1. call( ),方法给定第一个参数,绑定this 的指向对象,之后为函数调用所需参数,逗号隔开;
  2. apply( ),方法与call( )方法一致,第一个参数绑定this指向,第二个参数为一个数组,指定调用函数所需要参数.
  3. bind( )方法,可以绑定调用函数的this指向,与参数.后可更改(通过bind 方法改变).
  4. call( )与apply( ) 第一个参数 若为null 则this,指向全局对象.